#include <stdio.h>
#include <stdlib.h>

#define MAKSLINII 500
#define MAKSKOLUMN 20

#include "wejscie.h"
#include "wyjscie.h"
#include "dane.h"
/* wczytuje dane nagłówkowe z wejścia standardowego */
Naglowek wczytywanie_z_wejscia(char **lista, int *z)
{
  Naglowek dane;
  char line[MAX];
  int x;

  fprintf(stdout, "\nTryb wprowadzania danych:\n\n<Numer grupy dziekańskiej>: ");
  wczytaj(stdin, dane.grupa, &(dane.g));

  fprintf(stdout, "\nTermin (<dzień tygodnia> <godzina rozpoczęcia-godzina zakończenia>):\n");
  wczytaj(stdin, dane.termin, &(dane.t));

  fprintf(stdout, "\nProwadzący (<tytuł> <imię> <nazwisko>):\n");
  wczytaj(stdin, dane.prowadzacy, &(dane.p));

  fprintf(stdout, "\nTworzenie listy listy studentów:\nProsze wcisnąć [ENTER]\n");
  for(x=0; (fgets(line, MAX, stdin))!=NULL; x++) {
    fprintf(stdout, "\nDodaj nowego studenta (<imie|nazwisko|ocena>).\nJeśli chcesz już zakończyć dodawanie studentów do listy naciścnij [Ctrl+D]:\n");
    dodaj_studenta(lista, x, line);
  }
  *z=x;
  return dane;
}
/* wczytuje dane nagłówkowe z pliku */
Naglowek wczytywanie_z_pliku(const char *nazwa, char **lista, int *z)
{
  FILE *plik=fopen(nazwa, "r");
  Naglowek dane;
  char line[MAX];
  int x;

  pomin_znaki(plik, '=');
  pomin_znaki(plik, '=');
  wczytaj(plik, dane.grupa, &(dane.g));

  pomin_znaki(plik, '=');
  wczytaj(plik, dane.termin, &(dane.t));

  pomin_znaki(plik, '=');
  wczytaj(plik, dane.prowadzacy, &(dane.p));

  pomin_znaki(plik, '\n');

  for(x=1; (fgets(line, MAX, plik))!=NULL; x++)
    dodaj_studenta(lista, x, line);

  *z=x;
  fclose(plik);
  return dane;
}
/* wypisuje wczytane dane */
void wypisywanie(FILE *szablon, Naglowek dane_struct, char **lista, int x)
{
  char element1, element2, element3, element4, element5;
  int c, i, n, o, num, rozmiar_tabeli;
  int dl_lp, dl_imie, dl_nazwisko, dl_ocena;

  putchar('\n');
  pomin_znaki(szablon, '\n');
  wypisz_szablon(szablon);

  pomin_znaki(szablon, '\n');
  wypisz(dane_struct.grupa, dane_struct.g);
  putchar('\n');
  wypisz_szablon(szablon);

  pomin_znaki(szablon, '\n');
  wypisz(dane_struct.termin, dane_struct.t);
  putchar('\n');
  wypisz_szablon(szablon);

  pomin_znaki(szablon, '\n');
  wypisz(dane_struct.prowadzacy, dane_struct.p);
  putchar('\n');
  pomin_znaki(szablon, ':');
  pomin_znaki(szablon, '\n');
  /* poczatek */
  char tablica[MAKSLINII];
	fgets(tablica, MAKSLINII, szablon);
	int kolumny;
	kolumny=policzznaki(tablica, ':'); /*liczba kolumn we wzorcu*/
	
  /* koniec */
  element1=getc(szablon);
  pomin_znaki(szablon, ':');

  fscanf(szablon, "%d", &dl_lp);
  dl_lp--;
  char lp[dl_lp];
  element2=getc(szablon);

  pomin_znaki(szablon, ':');
  fscanf(szablon, "%d", &dl_imie);
  char imie[dl_imie];
  element3=getc(szablon);
  
  pomin_znaki(szablon, ':');
  fscanf(szablon, "%d", &dl_nazwisko);
  char nazwisko[dl_nazwisko];
  element4=getc(szablon);

  pomin_znaki(szablon, ':');
  fscanf(szablon, "%d", &dl_ocena);
  char ocena_c[dl_ocena];
  float ocena_f;
  element5=getc(szablon);

  rozmiar_tabeli=dl_lp+dl_imie+dl_nazwisko+dl_ocena+4;
  rysuj_tabele(rozmiar_tabeli);
  nazwy_kolumn(rozmiar_tabeli);
  for(num=1; num<x; num++) {

    przygotuj_tablice(lp, dl_lp);
    przygotuj_tablice(imie, dl_imie);
    przygotuj_tablice(nazwisko, dl_nazwisko);
    przygotuj_tablice(ocena_c, dl_ocena);

    fprintf(stdout, "%c", element1);
    for(c=0, i=0; (imie[i]=(*(lista[num]+c)))!='|'; c++, i++)
      ;
    imie[i]=' ';
    c++;

    for(n=0; (nazwisko[n]=(*(lista[num]+c)))!='|'; c++, n++)
      ;
    nazwisko[n]=' ';
    c++;
    for(o=0; (ocena_c[o]=(*(lista[num]+c)))!='\0'; c++, o++)
      ;
    ocena_c[o]=' ';
    c++;
    ocena_f=atof(ocena_c);
    fprintf(stdout, "%d", num);
    wypisz(lp, dl_lp);
    if(num>9) {
      putchar('\b');
      if(num>99)
        putchar('\b');
    }

    fprintf(stdout, "%c", element2);
    wypisz(imie, dl_imie);

    fprintf(stdout, "%c", element3);
    wypisz(nazwisko, dl_nazwisko);

    fprintf(stdout, "%c", element4);
    if(ocena_f==2 || ocena_f==3 || ocena_f==3.5 || ocena_f==4 || ocena_f==4.5 || ocena_f==5.0) {
      fprintf(stdout, "%.1f", ocena_f);
      for(c=0; c<dl_ocena-3; c++)
        fprintf(stdout, " ");
    } else {
      fprintf(stdout, "?");
      for(c=0; c<dl_ocena-1; c++)
        fprintf(stdout, " ");
    }
    fprintf(stdout, "%c\n", element5);
  }
  rysuj_tabele(rozmiar_tabeli);
  putchar('\n');
}
